package pers.xiaojun.boot.module.infra.service.file;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import pers.xiaojun.boot.module.infra.controller.file.vo.config.FileConfigQueryReqVO;
import pers.xiaojun.boot.module.infra.controller.file.vo.config.FileConfigSaveReqVO;
import pers.xiaojun.boot.module.infra.dao.entity.FileConfigDO;

/**
 * 文件配置服务层
 *
 * @author xiaojun
 * @since 2025-11-13
 */
public interface FileConfigService extends IService<FileConfigDO> {

    /**
     * 创建文件配置
     *
     * @param saveVO 创建文件配置信息
     * @return 文件配置
     */
    FileConfigDO saveFileConfig(FileConfigSaveReqVO saveVO);

    /**
     * 更新文件配置
     *
     * @param updateVO 更新文件配置信息
     * @return 文件配置
     */
    FileConfigDO updateFileConfig(FileConfigSaveReqVO updateVO);


    /**
     * 更新文件配置为主配置
     *
     * @param id 配置Id
     */
    void updateFileConfigAsMaster(Long id);

    /**
     * 根据Id删除配置
     *
     * @param id 配置Id
     */
    void removeFileConfigById(Long id);

    /**
     * 根据Id获取配置信息
     *
     * @param id 配置Id
     * @return 文件配置
     */
    FileConfigDO getFileConfigById(Long id);

    /**
     * 获取主文件配置
     *
     * @return 文件配置
     */
    FileConfigDO getMaterFileConfig();

    /**
     * 分页/条件查询文件配置
     *
     * @param queryVO 查询条件
     * @return 分页数据
     */
    Page<FileConfigDO> listFileConfigsPage(FileConfigQueryReqVO queryVO);

    /**
     * 测试文件配置连接
     *
     * @param id 配置Id
     */
    void testFileConfigConnect(Long id);

    /**
     * 校验文件配置是否存在
     *
     * @param id 配置Id
     * @return 文件配置
     */
    FileConfigDO validateFileConfigExists(Long id);
}
